using System;

namespace Cz
{
    [CzService]
    public interface ICzPool : ICzBase
    {
        void InitPool<T>(int initCount, Func<ICzPoolItem> create) where T : ICzPoolItem;
        void ClearPool<T>() where T : ICzPoolItem;
        
        T Get<T>() where T : ICzPoolItem;
        void Release<T>(T item) where T : ICzPoolItem;
    }

    public interface ICzPoolItem : IDisposable
    {
        void Release();
    }
}